﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidades;
using AccesoADatos;

namespace LogicaDeNegocios
{
    public class Historiales
    {

        #region Campos

        AuxiliarHstorial Auxiliar;

        #endregion

        #region Constructor

        public Historiales()
        {
            Auxiliar = new AuxiliarHstorial();
        }

        #endregion

        #region Métodos

        #region Agregar Historial

        public bool Agregar(Historial nuevoHistorial)
        {
            bool resultado = false;

            try
            {

                var historialAgregado = Auxiliar.Agregar(nuevoHistorial);

                if (historialAgregado != null)
                {
                    resultado = true;
                }

            }            
            catch (Exception ex)
            {
                throw (ex);                
            }

            return resultado;
        }



        #endregion

        #region Modificar Historial

        public bool Modificar(Historial historialAModificar)
        {
            bool resultado = false;

            try
            {
                Auxiliar.Modificar(historialAModificar);
                resultado = true;

            }
            catch (Exception ex)
            {
                throw (ex);
            }

            return resultado;
        }
        #endregion

        #region Eliminar Historial

        public bool Eliminar(Historial historialAEliminar)
        {
            bool resultado = false;

            try
            {
                Auxiliar.Eliminar(historialAEliminar);
                resultado = true;
            }
            catch (Exception ex)
            {                
                throw (ex);
            }

            return resultado;
        }

        #endregion

        #region Obtener Historiales

        public List<Historial> ObtenerHistoriales(string examenCodigo = "", DateTime? fechaHoraInicio = null)
        {
            List<Historial> resultado = null;
            try
            {                
                resultado = Auxiliar.Listar(examenCodigo, fechaHoraInicio);
            }
            catch (Exception ex)
            {
                throw (ex);
            }
            return resultado;
        }
        #endregion

        #region Obtener Historial

        public Historial ObtenerHistorial(string examenCodigo)
        {
            return ObtenerHistoriales(examenCodigo).FirstOrDefault();            
        }

        #endregion

        #region Agregar intento en el historial
        public bool Agregar(string codigoExamen)
        {            
            var ultimoHistorial = this.ObtenerHistoriales(codigoExamen).OrderBy(h => h.FechaHoraInicio).LastOrDefault();

            byte intento;

            if (ultimoHistorial == null)
            {
                intento = 1;                
            }
            else
            {
                intento = Convert.ToByte(ultimoHistorial.Intento + 1);                
            }
            return this.Agregar(new Historial { ExamenesCodigos = codigoExamen, FechaHoraInicio = DateTime.Now, Intento = intento});
        }
   

        #endregion

        #endregion

    }
}
